Módulo:CardGameCite
Copiado de Wookieepedia, autores Master Jonathan y Cade Calrayn. local p = {} local yesno = require('Módulo:Yesno') local datatable = mw.loadData('Módulo:CardGameCite/data') local currentTitle = mw.title.getCurrentTitle() local function makeCategoryLink(cat) -- "La categoría "se divide aquí para que el módulo no se coloque en la -- categoría "%s" cuando se guarde la página. return string.format('%s:%s', 'Categoría', cat) end local function makeWikitextError(template, msg) local ret = string.format( 'Plantilla:%s error: %s.', template, msg ) if currentTitle.namespace 0 then ret = ret .. makeCategoryLink('Páginas con parámetros erróneos en plantillas') end return ret end function p._main(args, warnings, template) -- Args: set: nombre del artículo establecido text: mostrar texto para establecer el enlace del artículo link: texto para vincular el nombre de la tarjeta a (posiblemente nula) cardname: nombre de la tarjeta (posiblemente nula) nourl: booleano que indica enlace externo / interno (verdadero para interno) escenario (solo SWGTCG): nombre del escenario Advertencias: tabla, posiblemente vacía, de mensajes relativos a parámetros desaprobados. Plantilla: nombre de la plantilla, para buscar los datos en ella local data = datatabletemplate local ret = {string.format('%s ', data.image)} -- El acceso local es más rápido que indexar una tabla cada vez local title, noSet = data.title, data.noSet if title then ret+ 1 = title if not noSet then ret+ 1 = ' – ' end end if not noSet then local set, text = args.set, args.text args.set, args.text = nil, nil if set text then ret+ 1 = string.format("%s", set) else ret+ 1 = string.format("%s", set, text) end end local link, cardname = args.link, args.cardname args.link, args.cardname = nil, nil if link or cardname then if link and not cardname then return makeWikitextError( template, '"link" no se puede usar sin "cardname"' ) end local fmt = ' (Card: %s)' if not link then ret+ 1 = fmt:format(cardname) else local cardlink if args.nourl then if link cardname then cardlink = string.format('%s', cardname) else cardlink = string.format('%s', link, cardname) end else cardlink = string.format( '%s', data.urlprefix, link, cardname ) end ret+ 1 = fmt:format(cardlink) end end args.nourl = nil local scenarioFormat, scenarioName = data.scenario, args.scenario if scenarioFormat and scenarioName then args.scenario = nil ret+ 1 = scenarioFormat:format(scenarioName) end -- En este punto, la tabla args debería estar vacía. Llamando next() en él -- devolverá nulo si está realmente vacío, o una clave de cadena si no lo está. local key = next(args) if key then warnings+ 1 = makeCategoryLink( 'Plantillas con parámetros no reconocidos' ) ret+ 1 = string.format( ' Aviso: Llamada a la Plantilla:%s' .. ' contiene un parámetro no reconocido "%s"', template, key ) end return table.concat(ret) .. table.concat(warnings) end -- Recorta los espacios en blanco de los argumentos de la plantilla y almacénalos local function processArgs(frame, ...) local args, warnings = {}, {} local funcs = {...} for k, v in pairs(frame:getParent().args) do v = v:match('^%s*(.-)%s*$') -- recorta espacio en blanco if v ~= '' then argsk = v end end args.nourl = yesno(args.nourl) for _, func in ipairs(funcs) do func(args, warnings) end return args, warnings end -- local function archiveWizards(args, warnings) if not args.nourl and args.link and args.link:match('wizards.com') then args.link = 'http://web.archive.org/web/' .. args.link end end -- Comprueba el parámetro de texto en los parámetros de la plantilla. -- y también agrega advertencias para el uso del parámetro 1 sin nombre -- o la falta de un parámetro de texto cuando sea necesario. local function processSet(args, warnings) if not args.set then if args1 then args.set = args1 args1 = nil warnings+ 1 = makeCategoryLink( 'Páginas que utilizan el parámetro 1 sin nombre en desuso para el juego de cartas' ) else error('el parámetro "set" es obligatorio', 0) end end end -- Si el parámetro de texto no está presente, recupera el texto que -- será utilizado para el conjunto después de algunos recortes. local function generateTextFromSet(args, warnings) if not args.text then local stop = args.set:find('%s*%(') if stop then args.text = args.set:sub(1, stop - 1) else args.text = args.set end end end -- Comprueba el parámetro de texto en los parámetros de la plantilla. -- y también agrega advertencias para el uso del parámetro 2 sin nombre -- o la falta de un parámetro de texto cuando sea necesario. local function processText(args, warnings) if not args.text then if args2 then args.text = args2 args2 = nil warnings+ 1 = makeCategoryLink( 'Páginas que utilizan el parámetro 2 sin nombre en desuso para el juego de cartas' ) else generateTextFromSet(args, warnings) end end end -- Recorta el texto establecido para el conjunto básico de juegos de cartas FFG. local function processTextFFGTCG(args, warnings) generateTextFromSet(args) if args.text 'Star Wars: The Card Game Core Set' then args.text = 'Core Set' end end -- Comprueba el parámetro cardname en los parámetros de la plantilla. -- y también agrega advertencias para el uso del parámetro 2 sin nombre -- o la falta del parámetro text cuando sea necesario. local function processCardname(args, warnings) if not args.cardname then if args2 then args.cardname = args2 args2 = nil warnings+ 1 = makeCategoryLink( 'Páginas que utilizan el parámetro 2 en desuso para el nombre de la tarjeta del juego de cartas' ) end end end -- Comprueba y almacena el parámetro url en los parámetros de la plantilla -- y agrega una advertencia para el uso del parámetro url en desuso. local function urlToLink(args, warnings) if not args.link then if args.url then args.link = args.url args.url = nil warnings+ 1 = makeCategoryLink( 'Páginas que usan parámetros de URL desaprobados para la Plantilla:SWGTCG' ) end end end local function processSetTextSWPM(args, warnings) processSet(args, warnings) if not args.text then if args2 then args.text = args2 args2 = nil warnings+ 1 = makeCategoryLink( 'Páginas que utilizan el parámetro 2 sin nombre en desuso para el juego de cartas' ) elseif args.set 'Base Set' then args.text = args.set args.set = 'Star Wars PocketModel TCG: Base Set' elseif args.set 'Clone Wars' or args.set 'Ground Assault' or args.set 'Order 66' then args.text = args.set args.set = args.set .. ' (PocketModels)' else generateTextFromSet(args, warnings) end end end local function main(frame, template, ...) local success, args, warnings = pcall(processArgs, frame, ...) if not success then return makeWikitextError(template, args) end return p._main(args, warnings, template) end -- Las siguientes son funciones de llamada para cada plantilla que -- utiliza este módulo para su plantilla. Para agregar una plantilla, -- simplemente copia la última entrada y cambia el nombre de la plantilla. function p.TCG(frame) return main(frame, 'TCG', processSet, processText, archiveWizards) end function p.CCG(frame) return main(frame, 'CCG', processSet, generateTextFromSet) end function p.FFGTCG(frame) return main(frame, 'FFGTCG', processSet, processTextFFGTCG, processCardname) end function p.JKTCG(frame) return main(frame, 'JKTCG', processSet, processText) end function p.SOTE(frame) return main(frame, 'SOTE') end function p.SOTEEMCC(frame) return main(frame, 'SOTEEMCC') end function p.SWGTCG(frame) return main(frame, 'SWGTCG', processSet, processText, urlToLink) end function p.SWPM(frame) return main(frame, 'SWPM', processSetTextSWPM) end function p.Topps(frame) return main(frame, 'Topps', processSet, generateTextFromSet, processCardname) end function p.YJCCG(frame) return main(frame, 'YJCCG', processSet, generateTextFromSet) end function p.SWIA(frame) return main(frame, 'SWIA', processSet, processText) end return p